'##############
'Getriebe-Script
'##############

'ZF Ecomat 4HP-590 Gearbox (Gang) Lock up in First Gear Method

'(c) 2008-2010 Rüdiger Hülsmann

'Script Version: 0.55
'Omsi release: 1.0

'Needs:
'- engine
'- bremse

'Revision History:
'- Rüdiger Hülsmann   13.04.2009   Neutralstellung mit anderer Zeitverzögerung
'- Rüdiger Hülsmann   04.06.2009   Verzögertes Einsetzen des Retarders
'- Marcel Kuhnt      13.06.2009   Removed Gearbox switches to cockpit script
'- Marcel Kuhnt      09.08.2009   Added Gearbox Failure
'- Rüdiger Hülsmann   09.10.2009   Rework for improved flexibility: Support for D.2/3-gearbox via config file
'               Functions added: Automatic neutral, retarder in 1st gear
'- Rüdiger Hülsmann   29.10.2009   Retarder bug removed
'- Rüdiger Hülsmann   16.09.2010   Reverse gear torque reductionl
'- Rüdiger Hülsmann   14.10.2010   Downshift 3-2 added
'- Rüdiger Hülsmann   13.12.2010   Gearshift procedures debugged, smooth retarder fadeout, dynamic shifting moment
'- Rüdiger Hülsmann   27.12.2010   Retarder fadeout debugged
'- Rüdiger Hülsmann   01.01.2011   Retarder linked to ABS
'- Rüdiger Hülsmann   04.01.2011   Reverse only below 5 km/h
'- Kyle Ortiz      08.03.2011      Added Another Gear
'- Kyle Ortiz      25.03.2011   Made a Few changes to make script less special voith like
'- Kyle Ortiz      04.04.2011   Added torque converter to 2C.
'- Kyle Ortiz      12.06.2011   Applied some changes which to the script
'- Kyle Ortiz      15.06.2011   more adjusting 
'- Kyle Ortiz      06.10.2011   Done work on the retarder, retarder gets briefly strengthen on downshifts to create torquely downshifts

'----------------------
'   Init
'----------------------

{macro:antrieb_init}
   1 (S.L.antrieb_getr_gangwahl) (S.L.antrieb_getr_gangvorwahl)
   1 (S.L.antrieb_getr_aktugang)
   
   0 (S.L.antrieb_wandler_moment)
{end}

'----------------------
'   Frame
'----------------------

{macro:antrieb_frame}

'Berechnen der Abtriebsdrehzahl
   (L.L.Wheel_RotationSpeed_1_L) (L.L.Wheel_RotationSpeed_1_R) + 2 / (C.L.antrieb_i_achse) * (S.L.antrieb_n_kardanwelle)

'Einlegen der Fahrstufe Loading the gear

   (L.S.GetTime) (L.L.antrieb_getr_gangwahlzeitpunkt) - (C.L.antrieb_gangwahlzeit) >
   (L.L.antrieb_getr_gangvorwahl) (L.L.antrieb_getr_gangwahl) = ! &&
   (L.L.antrieb_failure_general) ! &&
   {if}
         
      (L.L.antrieb_getr_gangwahl) 1 =
      {if}
         (L.L.engine_on) 1 =
         {if}
            (L.L.engine_n) (S.L.antrieb_rucksoundvol)
            (C.L.antrieb_kuppl_M_dn_min) (S.L.antrieb_schaltmoment_soll)

            (L.L.antrieb_getr_gangvorwahl) 1 >
'Check if driveshaft is spinning Greater then Value assigned in consist file on  if it is, then play the sound clip and change gears at designated value
            {if}
               (L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd6) >
               
               {if}
                  6 (S.L.antrieb_getr_aktugang)
                  (T.L.ev_schaltruck)
               {else}
               (L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd5) >
               
               {if}
                  5 (S.L.antrieb_getr_aktugang)
                  (T.L.ev_schaltruck)
               {else}
               (L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd4) >
               
               {if}
                  4 (S.L.antrieb_getr_aktugang)
                  (T.L.ev_schaltruck)
               {else}

               (L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd3) >
               
               {if}
                  3 (S.L.antrieb_getr_aktugang)
                  (T.L.ev_schaltruck)
               {else}
                 
               (L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd2) >
                    {if}
                  2 (S.L.antrieb_getr_aktugang)
                  (T.L.ev_schaltruck)
               {else}
                     1 (S.L.antrieb_getr_aktugang)
                     0 (S.L.antrieb_gear_engaged_timer)
                     (T.L.ev_schaltruck)
                        {endif}
                        {endif}
                     {endif}
                  {endif}
               {endif}
            {else}
               (L.L.velocity) 5 <
               {if}
                  1 (S.L.antrieb_getr_aktugang)
                  0 (S.L.antrieb_gear_engaged_timer)
                  (T.L.ev_schaltruck)
               {endif}
            {endif}
         {endif}
      {endif}   
      (L.L.antrieb_getr_gangvorwahl) (S.L.antrieb_getr_gangwahl)
   {endif}

'Gang rausnehmen, wenn Neutral angefordert

   (L.L.antrieb_getr_gangwahl) 1 =
   {if}
      0 (S.L.antrieb_getr_aktugang)
   {endif}
'Verhindern, dass der Rückwärtsgang oberhalb von 5 km/h eingelegt werden kann

   (L.L.antrieb_getr_gangvorwahl) 0 =
   (L.L.velocity) 5 >= &&
   {if}
      1 (S.L.antrieb_getr_gangwahl)
   {endif}







'Prüfen, ob Gang gewechselt wird - aber nur, wenn Getriebe heil ist:

   (L.L.antrieb_failure_general) !
   {if}
      (M.L.antrieb_getr_chkNxtGear)
   {endif}

'Berechnung des aktuellen Motordrehmoments:

   (M.L.engine_moment)

    

'Berechnung des dynamischen Schaltmoments

   (L.L.antrieb_getr_fest) !
   {if}
      (L.L.antrieb_schaltmoment) (L.S.Timegap) (L.L.throttle) (F.L.clutchengagement) * + (L.L.antrieb_schaltmoment_soll) min (S.L.antrieb_schaltmoment)
   {endif}





'Fallunterscheidung, ob Getriebe reibt oder wandelt oder nicht:

   (L.L.antrieb_getr_fest)
   {if}

'#################################################################################
'   Berechnung der Beschleunigung des Antriebsstrangs (am Motorflansch)
'    Calculate the acceleration of the drive train (on 'the flange)
'#################################################################################


      (L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (L.L.engine_n) - 2 * pi * 60 / (L.S.Timegap) /

'   Berechnung des Momentes am Motor durch Trägheit: 

      (C.L.engine_J) * s0

'   Berechnung des vom Antriebsstrang durchgeleiteten Momentes

      l0 /-/ (L.L.engine_M) (L.L.engine_M_additional_load) - + s1


'   Wenn das Antriebsmoment zu groß ist oder ein Wandlergang eingelegt wird, rutscht die Kupplung durch:
'   If the torque is too large or a converter gear is engaged, the clutch slips:

      l1 abs (L.L.antrieb_schaltmoment) > (L.L.antrieb_getr_gangwahl) 1 <= || (L.L.antrieb_wandler_engage) 1 = || 
 

      {if}

         0 (S.L.antrieb_getr_fest)

      {else}

'      Setzen des Momentes
'      Setting the torque

         l1 (S.L.antrieb_getr_M_an)


'      Berechnung des Getriebeabtriebmomentes:
'      Calculation of the transmission output torque:

         (L.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (S.L.M_Wheel)

'      Drehzahl des Motors ergibt sich aus der Getriebeabtriebswelle:
'      Speed of the engine is obtained from the transmission output shaft:


         (L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (S.L.engine_n)      
      {endif}


      0 (S.L.antrieb_wandler_moment)

   {else}

'#################################################################################
'   Bestimmen, ob Leerlauf ist...: Determine if idle ...:
'#################################################################################

      (L.L.antrieb_getr_gangwahl) 1 = (L.L.antrieb_getr_aktugang) 0 = ||

      {if}

'      ... Antriebs- und Getriebeantriebsmoment sind 0:
         0 (S.L.M_Wheel) (S.L.antrieb_getr_M_an)

         (M.L.engine_acceleration)
         0 (S.L.antrieb_wandler_moment)

'         Wenn Neutralgang beim Bremsen eingelegt wird
         (L.L.antrieb_getr_gangwahl) 1 =
         {if}
            0 (S.L.antrieb_retarder_wasrunning) (S.L.antrieb_gear_engaged_timer)
         {endif}

      {else}

'#################################################################################
'      Bestimmen, ob ein Wandlergang eingelegt ist...: Determine whether a converter gear is engaged
'#################################################################################

   (L.L.antrieb_wandler_engage) 1 =            
      

         
         {if}

            (L.L.antrieb_wandler_moment) abs (L.L.antrieb_getr_M_an) abs >
            {if}
               (L.L.antrieb_wandler_moment) 0 >
               {if}
                  (L.L.antrieb_getr_M_an) (C.L.antrieb_wandler_fillrate) (L.S.Timegap) * + (S.L.antrieb_getr_M_an)
                  (L.L.antrieb_wandler_moment) (L.L.antrieb_getr_M_an) <
                  {if}
                     (L.L.antrieb_wandler_moment) (S.L.antrieb_getr_M_an)
                  {endif}
               {else}
                  (L.L.antrieb_getr_M_an) (C.L.antrieb_wandler_fillrate) (L.S.Timegap) * - (S.L.antrieb_getr_M_an)
                  (L.L.antrieb_wandler_moment) (L.L.antrieb_getr_M_an) >
                  {if}
                     (L.L.antrieb_wandler_moment) (S.L.antrieb_getr_M_an)
                  {endif}
               {endif}
            {else}
               (L.L.antrieb_wandler_moment) (S.L.antrieb_getr_M_an)
            {endif}
   
         
         

'#################################################################################
'         Wandler Rückwärtsgang: Reverse for Torque Conventer
'#################################################################################

            (L.L.antrieb_getr_gangwahl) 0 =
            {if}
               (L.L.antrieb_n_kardanwelle) 2 * (S.L.antrieb_getr_n_ab) /-/ (L.L.engine_n) / (S.L.antrieb_wandler_ny)



                     

'               Berechnung des Motor-Antriebsmomentes
'               Calculation of the motor drive torque

                  (L.L.engine_n) 2 * 3.14 * 60 / (L.L.engine_n) 2 * 3.14 * 60 / * s1
                  0.0042 (L.L.antrieb_wandler_ny) (F.L.antrieb_wandler_lambda) * l1 * (L.L.engine_n) (F.L.antrieb_wandler_lowrpmsoftness) * (S.L.antrieb_wandler_moment)


'               Berechnung des Rad-Abtriebsmomentes
'               Calculation of the wheel output torque
      
                  (L.L.antrieb_wandler_ny) (F.L.antrieb_wandler_my) (L.L.antrieb_getr_M_an) * (C.L.antrieb_i_achse) * 0.9 * /-/ (L.L.engine_n) (F.L.antrieb_wandler_lowrpmsoftness) * (C.L.gear_efficiency) *
                   (L.L.antrieb_n_kardanwelle) (F.L.antrieb_reverse_torque_reduction) *
                  (S.L.M_Wheel)
               

'#################################################################################
'			Wandler Vorwärtsgang:	Tweak
'#################################################################################

				{else}
					(L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (S.L.antrieb_getr_n_ab) (L.L.engine_n) / (S.L.antrieb_wandler_ny)

					
'					Berechnung des Motor-Antriebsmomentes

						(L.L.engine_n) 2 * 3.14 * 60 / (L.L.engine_n) 2 * 3.14 * 60 / * s1
						0.0042 (L.L.antrieb_wandler_ny) (F.L.antrieb_wandler_lambda) * l1 * (L.L.engine_n) (F.L.antrieb_wandler_lowrpmsoftness) * (S.L.antrieb_wandler_moment)


'					Berechnung des Rad-Abtriebsmomentes
		
						(L.L.antrieb_wandler_ny) (F.L.antrieb_wandler_my) (L.L.antrieb_getr_M_an) * (L.L.antrieb_getr_ratio) * 0.85 * (L.L.engine_n) (F.L.antrieb_wandler_lowrpmsoftness) * (C.L.gear_efficiency) * (S.L.M_Wheel) 
					
				{endif}
      

'         Vergleich der Ein- und Ausgangsleistungen:
            (L.L.M_Wheel) (L.L.n_Wheel) * 3.14 * 30000 / (S.L.antrieb_gesamtleistung)
            (L.L.antrieb_gesamtleistung) (L.L.antrieb_motorleistung) / (S.L.antrieb_eta)

   
            (M.L.engine_acceleration)

         



'#################################################################################
'         Sonst ist ein normaler Gang eingelegt:
'         Otherwise, a normal gear is engaged:
'#################################################################################

         {else}


'         Berechnung der Drehzahldifferenz:

            (L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (L.L.engine_n) - s0



'         An dieser Stelle muss ggf. noch das unterschiedliche Kupplungsmoment eingesetzt werden:

            l0 0 <
            {if}
               (L.L.antrieb_schaltmoment)
            {else}
               (L.L.antrieb_schaltmoment) /-/
            {endif}
            (S.L.antrieb_getr_M_an)
            (L.L.antrieb_getr_ratio) *
            (C.L.gear_efficiency) * (S.L.M_Wheel)

            (M.L.engine_acceleration)

'         Prüfen, ob sich das Vorzeichen der Drehzahldifferenz umgekehrt hat:

            (L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (L.L.engine_n) - l0 * 0 <= (L.L.engine_n) 560 > &&
            {if}
               (L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (S.L.engine_n)
               (L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (L.L.engine_n) - 2 * pi * 60 / (L.S.Timegap) /

'               Berechnung des Momentes am Motor durch Trägheit:

               (C.L.engine_J) * s0

'               Berechnung des vom Antriebsstrang durchgeleiteten Momentes

               l0 /-/ (L.L.engine_M) (L.L.engine_M_additional_load) - + (S.L.antrieb_getr_M_an)


'               Berechnung des Getriebeabtriebmomentes:
'               Calculation of the transmission output torque:

               (L.L.antrieb_getr_M_an) abs (L.L.antrieb_schaltmoment) abs <
               {if}
                  (L.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (S.L.M_Wheel)
                  1 (S.L.antrieb_getr_fest)
                  (C.L.antrieb_kuppl_M_up_max) (S.L.antrieb_schaltmoment)
               {else}
                  (L.L.antrieb_schaltmoment) /-/ (S.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (S.L.M_Wheel)
               {endif}
               


            {endif}

            0 (S.L.antrieb_wandler_moment)

         {endif}
      {endif}

   {endif}







'#################################################################################
'   Retarder
'#################################################################################


   (L.L.brake) 0.01 >
   (L.L.antrieb_retarder_sw) &&
   (L.L.antrieb_retarder_sw_direkt) ||
   (L.L.antrieb_getr_gangwahl) 1 > &&
   (L.L.Throttle) 0.1 < &&
   (L.L.antrieb_n_kardanwelle) 0.1 > &&
   (L.L.antrieb_failure_general) ! &&
   (L.L.bremse_ABS_eingriff) ! &&
   {if}   

      (L.L.antrieb_retarder_armed) !
      {if}
         1 (S.L.antrieb_retarder_armed)
         0 (S.L.antrieb_retarder_armtime_elapsed)
      {endif}

'      Das Hochschalten aus dem 1. Gang (Antriebsstrang nicht fest eingekuppelt) zählt nicht zur Latenzzeit, solange also Armtime auf 0 halten:
  
      (L.L.antrieb_n_kardanwelle) (C.L.retarder_min_einschaltspeed) > (L.L.antrieb_retarder_armtime_elapsed) (C.L.antrieb_retarder_startdelay) > && (L.L.antrieb_retarder) ! &&
      {if}
         1 (S.L.antrieb_retarder)
         0 (S.L.antrieb_retarder_time_elapsed)
      {endif}


      (L.L.antrieb_retarder_sw_direkt)
      {if}
         2 (S.L.antrieb_retarderstufe)
      {else}
         1 (S.L.antrieb_retarderstufe)
      {endif}

'Verhaltensweise des Retarders beim Erreichen der Drehzahluntergrenze im 2. Gang:

      (L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd2) <
      (L.L.antrieb_retarder) 1 = &&
      {if}
         (C.L.antrieb_getr_version) s0 1 = l0 3 = ||
         {if}
            0 (S.L.antrieb_retarder) (S.L.antrieb_wendesatz)
            (L.L.engine_n) (S.L.antrieb_rucksoundvol)
            (T.L.ev_schaltruck)
         {else}
            1 (S.L.antrieb_getr_aktugang)
         {endif}
      {endif}
   

      (L.L.antrieb_retarder_armed)
      {if}
         (L.L.antrieb_retarder_armtime_elapsed) (L.S.Timegap) + (S.L.antrieb_retarder_armtime_elapsed)
         (L.L.antrieb_retarder_time_elapsed) (L.S.Timegap) + (S.L.antrieb_retarder_time_elapsed)
      {endif}

' Ausschalten des Retarders:

   {else}
      (L.L.antrieb_retarder) (L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd2) < &&
      {if}
         0 (S.L.antrieb_retarder_offtime) (S.L.antrieb_wendesatz)
         1 (S.L.antrieb_retarder_wasrunning)
      {endif}
      0 (S.L.antrieb_retarder) (S.L.antrieb_retarder_armed) (S.L.antrieb_retarder_armtime_elapsed) (S.L.antrieb_retarder_time_elapsed)   
   {endif}

'Umschaltverzögerung zwischen Bremsen und Traktion:

   (L.L.antrieb_retarder_wasrunning)
   {if}
      (L.L.antrieb_retarder_offtime) (L.S.Timegap) + (S.L.antrieb_retarder_offtime)
      (C.L.antrieb_retarder_changetime) >
      (L.L.antrieb_getr_gangwahl) 1 > &&
      {if}

         0 (S.L.antrieb_retarder_wasrunning) (S.L.antrieb_gear_engaged_timer)
      {endif}
   {endif}

   

'Bremsmoment des Retarders:
' moment the retarder brake:
' Additional




   (L.L.antrieb_retarder) 1 =
   {if}
      (L.L.antrieb_retarderstufe) 1 =
      {if}
	(L.L.antrieb_n_kardanwelle) (L.L.antrieb_getr_ratio) /-/ * 0.7 * (L.L.brake) (F.L.retarder_stufe1) * (L.L.antrieb_retarder_time_elapsed) (F.L.retarder_fadein) * (S.L.antrieb_retardermoment) (L.L.M_Wheel) + (S.L.M_Wheel) 
      {else}
         (L.L.antrieb_retarderstufe) 2 =
         {if}
            (L.L.antrieb_retardermoment) (L.S.Timegap) 10000 * - s1
            (L.L.antrieb_n_kardanwelle) 29.3 / (F.L.retarder_stufe2) 0.7 * (C.L.antrieb_i_achse) /-/ * (L.L.antrieb_retarder_time_elapsed) (F.L.retarder_fadein) * s2
            l1 l2 max (S.L.antrieb_retardermoment) (L.L.M_Wheel) + (S.L.M_Wheel)
         {else}
         (L.L.antrieb_retarderstufe) 3 =
         {if}   
            (L.L.antrieb_retardermoment) (L.S.Timegap) 10000 * - s1
            (L.L.antrieb_n_kardanwelle) 29.3 / (F.L.retarder_stufe3) 0.7 * (C.L.antrieb_i_achse) /-/ * (L.L.antrieb_retarder_time_elapsed) (F.L.retarder_fadein) * s2
            l1 l2 max (S.L.antrieb_retardermoment) (L.L.M_Wheel) + (S.L.M_Wheel)
            {else}
         (L.L.antrieb_retarderstufe) 4 =
         {if}   
            (L.L.antrieb_retardermoment) (L.S.Timegap) 10000 * - s1
            (L.L.antrieb_n_kardanwelle) 29.3 / (F.L.retarder_stufe4) 0.7 * (C.L.antrieb_i_achse) /-/ * (L.L.antrieb_retarder_time_elapsed) (F.L.retarder_fadein) * s2
            l1 l2 max (S.L.antrieb_retardermoment) (L.L.M_Wheel) + (S.L.M_Wheel)


         {endif}
         {endif}
         {endif}
      {endif}
   {else}
'      Ausfaden der Retarder-Bremsstärke
      (L.L.antrieb_retardermoment) (L.S.Timegap) 10000 * + 0 min (S.L.antrieb_retardermoment) (L.L.M_Wheel) + (S.L.M_Wheel)
      (L.L.antrieb_retarder_volume) (L.S.Timegap) 6 * - 0 max (S.L.antrieb_retarder_volume) s0
      l0 0 =
      {if}
         0 (S.L.antrieb_wendesatz)
      {endif}
   
   {endif}












'#################################################################################
'   Planetengetriebe-Wendesatz (Fjü-Sound)
'#################################################################################
   
   (L.L.antrieb_retarder) 
   (L.L.antrieb_getr_gangwahl) 0 = ||
   {if}
      1 (S.L.antrieb_wendesatz) (S.L.antrieb_retarder_volume)
'      Rücksetzen auf 0 erfolgt beim Fadeout des Retarderbremsmoments
   {endif}
{end}



'#################################################################################
'   Bestimmung der Schaltgeschwindigkeiten
'#################################################################################

{macro:antrieb_getr_chkNxtGear}

'   Höchster Gang: s0!

'   Verzögerung der Kickdown-Schaltung:

   (L.L.throttle) 1 = (C.L.kickdown) &&
   {if}
      (L.L.antrieb_kickdown_stellglied) (L.S.Timegap) (C.L.kickdown_stellglied_inc_rate) * + 1 min (S.L.antrieb_kickdown_stellglied)
      1 =
      {if}
         1 (S.L.antrieb_kickdown)
         (L.L.Throttle) 0.1 = &&
      {endif}
   {else}
      (L.L.antrieb_kickdown_stellglied) (L.S.Timegap) (C.L.kickdown_stellglied_dec_rate) * - 0 max (S.L.antrieb_kickdown_stellglied)
      0 =
      {if}
         0 (S.L.antrieb_kickdown)
      {endif}
   {endif}

'   Verzögerung der gaspedalabhängigen Schaltschwelle:

   
   (L.L.throttle) (L.L.antrieb_throttle_stellglied) >
   {if}
      (L.L.antrieb_throttle_stellglied) (L.S.Timegap) (C.L.throttle_stellglied_inc_rate) * + (L.L.throttle) min (S.L.antrieb_throttle_stellglied)
   {else}
      (L.L.antrieb_throttle_stellglied) (L.S.Timegap) (C.L.throttle_stellglied_dec_rate) * - (L.L.throttle) max (S.L.antrieb_throttle_stellglied)
   {endif}
   
'   Berechnen der aktuellen Beschleunigung:
   
   (L.L.Velocity) (L.L.antrieb_last_geschwindigkeit) - 3.6 / (L.S.Timegap) / (S.L.antrieb_beschleunigung)
   (L.L.Velocity) (S.L.antrieb_last_geschwindigkeit)
   
   


	(L.L.antrieb_getr_gangwahl) 0 =
	{if}
		0 s0
	{endif}
		
	(L.L.antrieb_getr_gangwahl) 1 =
	{if}
		1 s0
	{endif}

	(L.L.antrieb_getr_gangwahl) 2 =
	{if}
		2 s0
	{endif}

	(L.L.antrieb_getr_gangwahl) 3 =
	{if}
		3 s0
	{endif}

	(L.L.antrieb_getr_gangwahl) 4 =
	{if}
		4 s0
	{endif}

	(L.L.antrieb_getr_gangwahl) 5 =
	{if}
		5 s0
	{endif}

	(L.L.antrieb_getr_gangwahl) 6 =
	{if}
		6 s0
	{endif}

    


   {endif}

  	(L.L.engine_throttle_injection) (L.L.antrieb_last_throttle) - 1 / (L.S.Timegap) / (S.L.antrieb_delta_throttle)
	(L.L.engine_throttle_injection) (S.L.antrieb_last_throttle)

'	Smoothing out the acceleration to avoid rapid shifting point changes
	  (L.L.antrieb_beschleunigung) (L.L.antrieb_beschleunigung_last) >
	  {if}
		 (L.L.antrieb_beschleunigung_last) (L.S.Timegap) (C.L.Topodyn_stellglied_inc_rate) * + 1.1 min (S.L.antrieb_beschleunigung_last)

	  {else}
		(L.L.antrieb_beschleunigung_last) (L.S.Timegap) (C.L.Topodyn_stellglied_dec_rate) * - 0 max	(S.L.antrieb_beschleunigung_last)
	 {endif}

'#################################################################################
'	Load Based Shifting Points
'#################################################################################
0 (S.L.antrieb_topodyn_factor_Ups)

0.38 (L.L.antrieb_current_ratio) * (C.L.antrieb_LBSS_Sensitivity) * s5 
0.58 (L.L.antrieb_current_ratio) * (C.L.antrieb_LBSS_Sensitivity) * s6


(L.L.antrieb_beschleunigung_last) l5 < (C.L.antrieb_LBSS_Sensitivity) &&
{if}
 250 (L.L.antrieb_current_ratio) /  (S.L.antrieb_LBSS_Sensitivity)
{endif}

(L.L.antrieb_beschleunigung_last) l5 > (L.L.antrieb_beschleunigung_last) l6 < && (C.L.antrieb_LBSS_Sensitivity) &&
{if}
0 (S.L.antrieb_LBSS_Sensitivity)
{endif}

(L.L.antrieb_beschleunigung_last) l6 > (C.L.antrieb_LBSS_Sensitivity) &&
{if}
 -200  (L.L.antrieb_current_ratio) / (S.L.antrieb_LBSS_Sensitivity)
{endif}
0 (S.L.antrieb_topodyn_factor) 
'#################################################################################
'	Automatische Neutralschaltung bei Stillstand
'#################################################################################

(C.L.antrieb_getr_version) 1 >
{if}
	(L.L.antrieb_gear_engaged_timer) (L.S.Timegap) + (S.L.antrieb_gear_engaged_timer)
	(L.L.antrieb_n_kardanwelle) (C.L.antrieb_neutral_maxspeed) <
	(L.L.antrieb_getr_gangwahl) 1 > &&
	(L.L.antrieb_retarder) ! &&
	(L.L.antrieb_retarder_wasrunning) ! &&	
	{if}
		(L.L.bremse_p_Brzyl_HA) (C.L.antrieb_neutral_brakepressure) >
		{if}
			(L.L.antrieb_neutral_requested) !
			{if}
				1 (S.L.antrieb_neutral_requested)

				(C.L.antrieb_getr_version) 2 = !
				(C.L.antrieb_getr_version) 2 = (L.L.antrieb_gear_engaged_timer) (C.L.antrieb_gear_engaged_mintime) < && ||
				{if}
					0 (S.L.antrieb_gear_engaged_timer)
				{endif}
			{endif}
			
			(L.L.antrieb_neutral_requested)
			(L.L.antrieb_gear_engaged_timer) (C.L.antrieb_gear_engaged_mintime) >= &&
			{if}
				0 (S.L.antrieb_getr_aktugang)
				(L.L.antrieb_getr_gangwahl) 2 > (L.L.engine_on) &&
				{if}
				(L.L.antrieb_NBS) (L.S.Timegap) 1 * + 1 min (S.L.antrieb_NBS)
				{else}
				0 (S.L.antrieb_NBS)
				{endif}
			{endif}

		{else}	
			
			(L.L.antrieb_NBS) (L.S.Timegap) 1.5 * - 0 max (S.L.antrieb_NBS)
			1 (S.L.antrieb_getr_aktugang)
			
			
			0 (S.L.antrieb_neutral_requested) (S.L.antrieb_gear_engaged_timer)
			
		{endif}
		
	{endif}
{endif}



         (L.L.antrieb_getr_aktugang) s1

       1 =
         {if}
            (C.L.antrieb_getr_ratio1) (S.L.antrieb_current_ratio) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
               

		 
		 (L.L.antrieb_kickdown)
		{if}
			(C.L.antrieb_wandler_autoSwUpkickdnSpd1) s8 s9
		{else}
			 (C.L.antrieb_wandler_autoSwUpMindnSpd1) s9
			 (C.L.antrieb_wandler_autoSwUpMaxdnSpd1) s8
		{endif}
		(M.L.antrieb_getr_chkCh_1) (L.L.antrieb_n_kardanwelle) < (C.L.lock_up_type) 1 = && 
		{if}
			0 (S.L.antrieb_wandler_engage) 

			       (C.L.antrieb_kuppl_M_up_max) s6
               (C.L.antrieb_kuppl_M_up_min) s7
                 (M.L.antrieb_getr_schaltmoment) (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)  
		{endif}
	    	(L.L.antrieb_kickdown)
		{if}
			(C.L.antrieb_wandler_autoSwDnkickdnSpd1) s8 s9
		{else}
			 (C.L.antrieb_wandler_autoSwDnMindnSpd1) s9
			 (C.L.antrieb_wandler_autoSwDnMaxdnSpd1) s8
		{endif}

		(M.L.antrieb_getr_chkCh_1) (L.L.antrieb_n_kardanwelle) >
		{if}
			1 (S.L.antrieb_wandler_engage)
		{endif}

			(L.L.antrieb_kickdown)
			{if}
				(C.L.antrieb_getr_autoSwUpkickdnSpd1) s3 s4
			{else}
				(C.L.antrieb_getr_autoSwUpMinSpd1) s4
				(C.L.antrieb_getr_autoSwUpMaxSpd1)  s3
			{endif}
				(C.L.second_gear_start) 1 = 
				{if}
				0 s3 s4
				{endif}
		
            (M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) < (L.L.antrieb_beschleunigung) 0 > &&
	     {if}
			(M.L.antrieb_throttlelimitor)
			2 (S.L.antrieb_getr_aktugang)
		        (T.L.ev_gear_upshift_1)
               (C.L.antrieb_kuppl_M_up_max) s6
               (C.L.antrieb_kuppl_M_up_min) s7
                 (M.L.antrieb_getr_schaltmoment) (S.L.antrieb_schaltmoment_soll) 
		 550 (S.L.antrieb_schaltmoment)        
	        
            {endif}

	        (M.L.antrieb_throttleinjection_governor_1_C) 
		(M.L.antrieb_gearwhine) 
		(M.L.antrieb_kickdown_time)
			
	  
	   {endif}



         l1 2 =
         {if}
            (C.L.antrieb_getr_ratio2) (S.L.antrieb_current_ratio) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)

	    	(L.L.antrieb_kickdown)
		{if}
			
					(L.L.antrieb_is_downshift1) 1 =
					{if}
					(C.L.antrieb_wandler_autoSwUpkickdnSpd2) 150 + s8 s9
					{else}
					(C.L.antrieb_wandler_autoSwUpkickdnSpd2) s8 s9
					{endif}
		{else}
			 (C.L.antrieb_wandler_autoSwUpMindnSpd2) s9
			 (C.L.antrieb_wandler_autoSwUpMaxdnSpd2)  s8
		{endif}





		(M.L.antrieb_getr_chkCh_1) (L.L.antrieb_n_kardanwelle) < (L.L.throttle) 0.15 > && (L.L.antrieb_kickdown_sense) (C.L.antrieb_hold_gear) > && (C.L.lock_up_type) 1 = && (C.L.lock_up_type) 2 = || && 
		{if}
			0 (S.L.antrieb_wandler_engage)
			0 (S.L.antrieb_is_downshift)
			0 (S.L.antrieb_is_downshift1)
			(C.L.antrieb_kuppl_M_up_max) s6
			 (C.L.antrieb_kuppl_M_up_min) s7
			 (M.L.antrieb_getr_schaltmoment) (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment) 
		{endif}
	    	(L.L.antrieb_kickdown)
		{if}
			(C.L.antrieb_wandler_autoSwDnkickdnSpd2) s8 s9
		{else}
			 (C.L.antrieb_wandler_autoSwDnMindnSpd2) s9
			 (C.L.antrieb_wandler_autoSwDnMaxdnSpd2)  s8
		{endif}

		(L.L.antrieb_n_kardanwelle) (C.L.antrieb_wandler_autoSwUpkickdnSpd1) <
		{if}
		
		1 (S.L.antrieb_is_downshift1)
		{endif}

		(M.L.antrieb_getr_chkCh_1) (L.L.antrieb_n_kardanwelle) >
		{if}
			1 (S.L.antrieb_wandler_engage)
			1 (S.L.antrieb_is_downshift1)
		{endif}
            (L.L.antrieb_kickdown)
            {if}
                (C.L.antrieb_getr_autoSwUpkickdnSpd2) s3 s4

            {else}
               (C.L.antrieb_getr_autoSwUpMinSpd2) s4
               (C.L.antrieb_getr_autoSwUpMaxSpd2)  s3
            {endif}
         
	    (M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) < (L.L.antrieb_beschleunigung) 0 > &&
            {if}
	       (M.L.antrieb_throttlelimitor)
               3 (S.L.antrieb_getr_aktugang)
	       0 (S.L.is_downshift)
	       (C.L.antrieb_kuppl_M_up_max) s6
               (C.L.antrieb_kuppl_M_up_min)  s7
              (M.L.antrieb_getr_schaltmoment) (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment) 
	    (T.L.ev_gear_upshift_2)   
            {endif}

	  

            (L.L.antrieb_kickdown) 
            {if}
               (C.L.antrieb_getr_autoSwDnkickdnSpd2) s3 s4
            {else}
               (C.L.antrieb_getr_autoSwDnMinSpd2) s4
               (C.L.antrieb_getr_autoSwDnMaxSpd2)  s3
            {endif}
	(C.L.second_gear_start) 1 = 
				{if}
				0 s3 s4
				{endif}
            (M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) >
            {if}
		(M.L.antrieb_throttlelimitor) 
               1 (S.L.antrieb_getr_aktugang)
               0 (S.L.antrieb_schaltmoment)
               0 (S.L.antrieb_is_downshift1)
	       (T.L.ev_gear_downshift_2)
            {endif}

	  (M.L.antrieb_gearwhine)
 (M.L.antrieb_kickdown_time)
  (M.L.antrieb_throttlelimitor_limitor)
	 
         {endif}
'Add gear here
l1 3 =
         {if}
            (C.L.antrieb_getr_ratio3) (S.L.antrieb_current_ratio) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
            (L.L.antrieb_kickdown)
            {if}
               (C.L.antrieb_getr_autoSwUpkickdnSpd3) s3 s4
            {else}
               (C.L.antrieb_getr_autoSwUpMinSpd3)  s4
               (C.L.antrieb_getr_autoSwUpMaxSpd3)  s3
            {endif}

            (M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) < (L.L.antrieb_beschleunigung) 0 > && (L.L.antrieb_kickdown_sense) (C.L.antrieb_hold_gear) > &&
            {if}
		(M.L.antrieb_throttlelimitor)
               4 (S.L.antrieb_getr_aktugang)

	       0 (S.L.is_downshift)
	       	(C.L.antrieb_kuppl_M_up_max) s6
               (C.L.antrieb_kuppl_M_up_min) s7
	       (T.L.ev_gear_upshift_3)  
               (M.L.antrieb_getr_schaltmoment)  (S.L.antrieb_schaltmoment_soll)  
	       500 (S.L.antrieb_schaltmoment)
                    
            {endif}
            (L.L.antrieb_kickdown) 
            {if}
               (C.L.antrieb_getr_autoSwDnkickdnSpd3)  s3 s4
            {else}
               (C.L.antrieb_getr_autoSwDnMinSpd3)  s4
               (C.L.antrieb_getr_autoSwDnMaxSpd3)  s3
            {endif}
	      (M.L.retarderpm)

            (M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) > (L.L.antrieb_kickdown_sense) (C.L.antrieb_hold_gear) > &&
            {if}
		(M.L.antrieb_throttlelimitor_1)
               2 (S.L.antrieb_getr_aktugang)
               30 (S.L.antrieb_schaltmoment)
	       
		 (T.L.ev_gear_downshift_2)
		 (T.L.ev_Retarder_Air_Release)
            {endif}


	
(M.L.antrieb_gearwhine)
	
  (M.L.antrieb_kickdown_time)
         {endif}




l1 4 =
         {if}
            (C.L.antrieb_getr_ratio4) (S.L.antrieb_current_ratio) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
 	     
              

	    (L.L.antrieb_kickdown)
            {if}
               (C.L.antrieb_getr_autoSwUpkickdnSpd4)  s3 s4
            {else}
               (C.L.antrieb_getr_autoSwUpMinSpd4) s4
               (C.L.antrieb_getr_autoSwUpMaxSpd4)  s3
            {endif}

            (M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) < l0 3 >= && (L.L.antrieb_beschleunigung) 0 > && (L.L.antrieb_kickdown_sense) (C.L.antrieb_hold_gear) > &&   (C.L.antrieb_ecomat_gears) 3 > &&
            {if}
	      (M.L.antrieb_throttlelimitor)
               5 (S.L.antrieb_getr_aktugang)
	        0 (S.L.is_downshift)
               (C.L.antrieb_kuppl_M_up_max) s6
               (C.L.antrieb_kuppl_M_up_min) s7
               (M.L.antrieb_getr_schaltmoment) (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
               (T.L.ev_gear_upshift_4)
            {endif}
            (L.L.antrieb_kickdown) (L.L.antrieb_retarder_armed) || 
            {if}
               (C.L.antrieb_getr_autoSwDnkickdnSpd4) s3 s4
            {else}

               (C.L.antrieb_getr_autoSwDnMinSpd4) s4
	   
               (C.L.antrieb_getr_autoSwDnMaxSpd4)  s3
            {endif}

	   
	    (M.L.retarderpm)
            (M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) > (L.L.antrieb_kickdown_sense) (C.L.antrieb_hold_gear) > &&
            {if}
		(M.L.antrieb_throttlelimitor_1)
               3 (S.L.antrieb_getr_aktugang)
	       (C.L.antrieb_kuppl_M_dn_max) s6
               (C.L.antrieb_kuppl_M_dn_min) s7
               60 (S.L.antrieb_schaltmoment)
	      (T.L.ev_gear_downshift_3)
	      
            
            {endif}




	    (M.L.antrieb_gearwhine)
	      (M.L.antrieb_kickdown_time)
         {endif}

l1 5 =
         {if}
            (C.L.antrieb_getr_ratio5) (S.L.antrieb_current_ratio) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)

	    (L.L.antrieb_kickdown)
            {if}
               (C.L.antrieb_getr_autoSwUpkickdnSpd5)  s3 s4
            {else}
               (C.L.antrieb_getr_autoSwUpMinSpd5) s4
               (C.L.antrieb_getr_autoSwUpMaxSpd5)  s3
            {endif}
            (M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) < l0 3 >= && (C.L.antrieb_ecomat_gears) 5 > && 
            {if}
	      (M.L.antrieb_throttlelimitor)
               6 (S.L.antrieb_getr_aktugang)
               (C.L.antrieb_kuppl_M_up_max) s6
               (C.L.antrieb_kuppl_M_up_min) s7
               (M.L.antrieb_getr_schaltmoment) (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
               (T.L.ev_gear_upshift3)
            {endif}
            (L.L.antrieb_kickdown) (L.L.antrieb_retarder_armed) || 
            {if}
               (C.L.antrieb_getr_autoSwDnkickdnSpd5) s3 s4
            {else}

               (C.L.antrieb_getr_autoSwDnMinSpd5) s4
	   
               (C.L.antrieb_getr_autoSwDnMaxSpd5)  s3
            {endif}

	   
	    (M.L.retarderpm)
            (M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) > (L.L.antrieb_kickdown_sense) (C.L.antrieb_hold_gear) > &&
            {if}
		(M.L.antrieb_throttlelimitor_1)
               4 (S.L.antrieb_getr_aktugang)
	       (C.L.antrieb_kuppl_M_dn_max) s6
               (C.L.antrieb_kuppl_M_dn_min) s7
               100 (S.L.antrieb_schaltmoment)
	       (T.L.ev_gear_downshift_4)
	      
            
            {endif}

	       (L.L.is_downshift) 1 = (L.L.throttle) 0.2 > && (C.L.lock_up_type) 3 = &&
            {if}
               0 (S.L.antrieb_wandler_engage)
	      0 (S.L.is_downshift)
		
            {endif}

	    (M.L.antrieb_gearwhine)
	      (M.L.antrieb_kickdown_time)
         {endif}

l1 6 =
         {if}
            (C.L.antrieb_getr_ratio6) (S.L.antrieb_current_ratio) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)

            (L.L.antrieb_kickdown) l0 3 < ||
            {if}
               (C.L.antrieb_getr_autoSwDnkickdnSpd6)  s3 s4
            {else}
               (C.L.antrieb_getr_autoSwDnMinSpd6) s4
               (C.L.antrieb_getr_autoSwDnMaxSpd6) s3
            {endif}
            (M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) > (L.L.antrieb_retarder_armed) ! &&
            (L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd6) < ||
            {if}
		(M.L.antrieb_throttlelimitor_1)
               5 (S.L.antrieb_getr_aktugang)
	       (C.L.antrieb_kuppl_M_dn_max) s6
               (C.L.antrieb_kuppl_M_dn_min) s7
                0 (S.L.antrieb_schaltmoment)
               
            {endif}
            (M.L.antrieb_gearwhine)
	      (M.L.antrieb_kickdown_time)
         {endif}






   {endif}
   {endif}


'   Testweise: Differenzialdrehzahlpfeifen

   (L.L.engine_n) (L.L.antrieb_n_kardanwelle) 2 * - (S.L.antrieb_n_differenz)




{end}

{macro:antrieb_getr_chkCh}
'   Berechnung der aktuellen Hochschaltschwelle: (l3 = bei Vollgas, l4 = bei Leergas)
   (L.L.antrieb_throttle_stellglied) s2 l3 * 1 l2 - l4 * +
{end}

{macro:antrieb_getr_chkCh_1}
'   Berechnung der aktuellen Hochschaltschwelle: (l3 = bei Vollgas, l4 = bei Leergas)
   (L.L.antrieb_throttle_stellglied) s2 l8 * 1 l2 - l9 * +
{end}

{macro:antrieb_getr_schaltmoment}
'   Berechnung des Schaltmomentes (l6 = bei Vollgas, l7 = bei Leergas)
   (L.L.antrieb_throttle_stellglied) s5 l6 * 1 l5 - l7 * +
{end}

{macro:antrieb_getr_schaltmoment1}
'   Berechnung des Schaltmomentes (l6 = bei Vollgas, l7 = bei Leergas)
   (L.L.antrieb_throttle_stellglied) s5 l6 * 1 * 1 l5 - l7 * +
{end}


{macro:antrieb_throttlelimitor}

 0 (S.L.antrieb_kickdown_sense) 
 2.5 (S.L.antrieb_retarder_ap)
0 (S.L.antrieb_gearwhine_fade)

{end}

{macro:antrieb_throttlelimitor_limitor}

{end}


{macro:antrieb_gearwhine}
(L.L.antrieb_gearwhine_fade) (L.S.Timegap) 1 * + (S.L.antrieb_gearwhine_fade)
(L.L.antrieb_retarder_ap) (L.S.Timegap) 4 * - 1 max (S.L.antrieb_retarder_ap)					
{end}

{macro:antrieb_throttlelimitor_1}

2.5 (S.L.antrieb_retarder_ap)
0.5 (S.L.antrieb_kickdown_sense)
0 (S.L.antrieb_gearwhine_fade)

{end}

{macro:retarderpm}

{end}
{macro:antrieb_throttleinjection_governor_1_C}
(L.L.throttle) (C.L.throttleinjection_governor_1_C) * (S.L.engine_throttle_injection)
					
{end}


{macro:antrieb_throttlegovernor}
(L.L.throttle) (C.L.throttleinjection_governor) * (S.L.engine_throttle_injection)
					
{end}




{macro:antrieb_kickdown_time}

	 	
' calculatation of current ratio
500 (L.L.antrieb_current_ratio) / (S.L.antrieb_holdgear_stall_prevention)

(L.L.antrieb_n_kardanwelle) (L.L.antrieb_holdgear_stall_prevention) > 
	{if}

	(L.L.antrieb_kickdown_sense) (L.S.Timegap) + (S.L.antrieb_kickdown_sense)

		{else}
		5 (S.L.antrieb_kickdown_sense)
	
		
	 {endif}
	  {endif}

	
{end}